import { buildProps } from '@v-model/shared--utils'
import { type ExtractPropTypes } from 'vue'

export const combogridProps = buildProps({
  /**
   * 选择数据 key 值设置
   */
  modelValue: {
    type: [String, Number, null],
    default: '',
  },
  /**
   * 选择数据 key 值设置
   */
  value: {
    type: String,
    default: 'value',
  },
  /**
   * 选择数据 展示的值设置
   */
  label: {
    type: String,
    default: 'label',
  },

  /**
   * 是否聚焦就自动查询后端  默认查询
   */
  focusQuery: {
    type: Boolean,
    default: true,
  },

  /**
   * @deprecated 返回数据的value ，  建议使用 `fields`
   */
  code: {
    type: String,
    default: '',
  },
  /**
   *  @description 请求后端 url 接口值
   */
  url: {
    type: String,
    default: '',
  },
  /**
   * @description 后端接口， 输入框输入字段后端接收对应的值
   */
  filterCode: {
    type: String,
    default: '',
  },
  /**
   * @description 默认 下拉展示表格宽度
   */
  width: {
    type: [Number, String],
    default: 350,
  },
  /**
   * @description 下拉展示表格高度
   */
  height: {
    type: [Number, String],
    default: 250,
  },
  /**
   * @deprecated 之前版本  下拉展示表格宽度
   */
  gridWidth: {
    type: [Number, String],
    default: null,
  },
  /**
   * @deprecated 之前版本 下拉展示表格高度
   */
  gridHeight: {
    type: [Number, String],
    default: null,
  },

  /**
   * @description 树结构时表格是否展开
   */
  defaultExpand: {
    type: Boolean,
    default: true,
  },

  /**
   * @description 默认分页页数
   */
  pageSizes: {
    type: Array,
    default: () => [15, 30, 50, 100],
  },

  /**
   * @description 查询数据后是否自动选中
   */
  autoSelect: {
    type: Boolean,
    default: false,
  },

  /**
   * @description 查询数据key  value 选中值绑定的字段
   */
  fields: {
    type: Array,
    default: () => [],
  },

  /**
   * @description 输入框内容请求数据的方式
   */
  requestEvent: {
    type: Array,
    default: () => [],
  },

  gridData: {
    type: Array,
    default: () => [],
  },
  data: {
    type: Array,
    default: () => [],
  },

  /**
   * @description 输入框聚焦时，是否自动显示弹框
   */
  autoVisible: {
    type: Boolean,
    default: true,
  },

  /**
   * @description 输入框前图标
   */
  gridInputIcon: {
    type: String,
    default: '',
  },

  /**
   * @description 是否默认初始化加载组件时加载一次列表
   */
  initRequesUrl: {
    type: Boolean,
    default: false,
  },
  inputlabel: {
    type: String,
    default: '',
  },

  /**
   * @description 行样式添加
   * */
  rowStyle: {
    type: Function,
    default: () => {},
  },

  // 提示语
  placeholder: {
    type: String,
    default: '',
  },

  /**
   * @description 其他请求参数，除了filterCode 多余的接口请求参数
   * */
  requestArgs: {
    type: Object,
    default: () => {},
  },

  /**
   *  手段传入数据，数据源值
   * */
  options: {
    type: Object,
    default: () => [],
  },

  /**
   *  按钮右边图标
   */
  suffixIcon: {
    type: String,
    default: 'arrow-down',
  },
  /**
   * @description 表格动态列的数据源
   */
  columns: {
    type: Array,
    default: () => [],
  },
  /**
   * @deprecated 表格的序号动态宽度，默认60，与原来保持一致
   */
  indexWidth: {
    type: Number,
    default: 60,
  },

  /**
   * @deprecated 老版本 表格动态列的数据源
   */
  gridColumn: {
    type: Array,
    default: () => [],
  },
  /**
   * @description 是否显示分页
   */
  pagination: {
    type: [Boolean, String],
    default: false,
  },

  /**
   * @description 是否显示表格边框
   */
  border: {
    type: Boolean,
    default: true,
  },
  /**
   * @description 表格折叠行key
   */
  rowKey: {
    type: [String, Number],
    default: '',
  },

  /**
   * @description treeProps
   */
  treeProps: {
    type: Object,
    default: () => {},
  },

  /**
   * @description 当为树结构时，父的id
   */
  pid: {
    type: String,
  },

  /**
   * @description 默认情况，输入框选中数据点击 enter 时，自动关闭弹框， 是否用户自定义点击事件
   */
  userDbClick: {
    type: [Boolean, String],
  },
  /**
   * @description change事件延迟查询
   *  默认 350ms
   */
  delay: {
    type: Number,
    default: 350,
  },
  /**
   * @description 是否禁用
   */
  disabled: Boolean,

  /**
   * @description 是否清空
   */
  clearable: {
    type: Boolean,
    default: false,
  },
} as const)

export type CombogridProps = ExtractPropTypes<typeof combogridProps>
